package cn.kmbeast.controller;

import cn.kmbeast.aop.Pager;
import cn.kmbeast.pojo.api.ApiResult;
import cn.kmbeast.pojo.api.Result;
import cn.kmbeast.pojo.dto.query.extend.MessageQueryDto;
import cn.kmbeast.pojo.em.IsReadEnum;
import cn.kmbeast.pojo.em.MessageType;
import cn.kmbeast.pojo.entity.Message;
import cn.kmbeast.pojo.vo.MessageTypeVO;
import cn.kmbeast.pojo.vo.MessageVo;
import cn.kmbeast.service.MessageService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/message")
public class MessageController {


    /**
     *  messageService 是健康模型业务的接口  实现自动装配
     */
    @Resource
    private MessageService messageService;


    /**
     * 查询全部的消息类型
     *
     * @return Result<List < MessageTypeVO>> 通用响应体
     */
    @GetMapping(value = "/types")
    public Result<List<MessageTypeVO>> all() {
        MessageType[] messageTypes = MessageType.values();
        List<MessageTypeVO> messageTypeVOS = new ArrayList<>();
        for (MessageType messageType : messageTypes) {
            MessageTypeVO messageTypeVO = new MessageTypeVO(messageType.getType(), messageType.getDetail());
            messageTypeVOS.add(messageTypeVO);
        }
        return ApiResult.success(messageTypeVOS);
    }


    /**
     * 给全部用户(除了管理员)发送通知
     * @param message
     * @return
     */
    @PostMapping("/systemInfoUsersSave")
    public Result<Void> systemInfoUsersSave(@RequestBody Message message){
        return messageService.systemInfoUsersSave(message);

    }


    /**
     * 定向通知用户
     * @param messages
     * @return
     */
    @PostMapping(value = "/systemInfoSave")
    public Result<Void> systemInfoSave(@RequestBody List<Message> messages) {
        messages.forEach(message -> {
            message.setMessageType(MessageType.SYSTEM_INFO.getType());
            message.setIsRead(IsReadEnum.READ_NO.getStatus());
        });
        return messageService.systemInfoSave(messages);
    }


    /**
     * 消息记录的批量删除
     * @param ids  接受消息记录id的List集合
     * @return Result<Void>
     */
    @PostMapping("/batchDelete")
    public Result<Void> batchDelete(@RequestBody List<Long> ids) {
        return  messageService.batchDelete(ids);
    }

    /**
     * 消息的查询
     * @param messageQueryDto 接受消息类型的查询类
     * @return Result<List < HealthModelConfigDto>> 返回健康模型列表
     */
    @Pager
    @PostMapping("/query")
    public Result<List<MessageVo>> query(@RequestBody MessageQueryDto messageQueryDto) {
        return  messageService.query(messageQueryDto);
    }

    /**
     * 实现批量已读
     */
    @PostMapping("/clearMessage")
    public Result<Void> batchRead(@RequestBody MessageQueryDto messageQueryDto) {
        return  messageService.clearMessage(messageQueryDto);
    }

}
